home *** CD-ROM | disk | FTP | other *** search
/ Atari Mega Archive 1 / Atari Mega Archive - Volume 1.iso / gnu / fpu881 / src6.zoo / cmult.s < prev    next >
Text File  |  1991-09-24  |  3KB  |  102 lines

  1. # double precision floating point stuff for Atari-gcc using the SFP004
  2. # developed with gas
  3. #
  4. # double precision complex multipliation
  5. # makes use of many of the 68881 regs for high internal precision and speed
  6. #
  7. # M. Ritzert (mjr at dmzrzu71)
  8. #
  9. # 12.10.1990
  10. #
  11. # addresses of the 68881 data port. This choice is fastest when much data is
  12. # transferred between the two processors.
  13.  
  14. comm =     -6
  15. resp =    -16
  16. zahl =      0
  17.  
  18. # waiting loop ...
  19. #
  20. # wait:
  21. # ww:    cmpiw    #0x8900,a1@(resp)
  22. #     beq    ww
  23. # is coded directly by
  24. #    .long    0x0c688900, 0xfff067f8 (a0)
  25. # and
  26. # www:    tst.w    a0@(resp)
  27. #    bmi.b    www
  28. # is coded by
  29. #    .word    0x4a68,0xfff0,0x6bfa        | test
  30.  
  31.     .text; .even
  32.     .globl _cmult
  33. _cmult:
  34.     movel    a1,d0                | save a1 as return value
  35.     lea    0xfffa50,a0            | fpu address
  36.  
  37. # load floating point registers
  38.     movew    #0x5400,a0@(comm)        | real part of z1 to fp0
  39.     .long    0x0c688900, 0xfff067f8
  40.     movel    a7@(4),a0@            | load arg_hi
  41.     movel    a7@(8),a0@            | load arg_low
  42.  
  43.     movew    #0x5480,a0@(comm)        | imaginary part of z1 to fp1
  44.     .long    0x0c688900, 0xfff067f8
  45.     movel    a7@(12),a0@            | load arg_hi
  46.     movel    a7@(16),a0@            | load arg_low
  47.  
  48.     movew    #0x5500,a0@(comm)        | real part of z2 to fp2
  49.     .long    0x0c688900, 0xfff067f8
  50.     movel    a7@(20),a0@            | load arg_hi
  51.     movel    a7@(24),a0@            | load arg_low
  52.  
  53.     movew    #0x5580,a0@(comm)        | imaginary part of z2 to fp3
  54.     .long    0x0c688900, 0xfff067f8
  55.     movel    a7@(28),a0@            | load arg_hi
  56.     movel    a7@(32),a0@            | load arg_low
  57.  
  58. #    move.w    #%0000 0010 0000 0000,comm(c)    ; copy fp0 to fp4
  59.     movew    #0x0200,a0@(comm)        | copy fp0 to fp4
  60.     .word    0x4a68,0xfff0,0x6bfa        | test
  61.  
  62. # now compute the product
  63.  
  64. #    movew    #%000 010 100 0100011,a0@(comm)    | mul fp2 -> fp4
  65.     movew    #0x0a23,a0@(comm)        | mul fp2 -> fp4
  66.     .word    0x4a68,0xfff0,0x6bfa        | test
  67.  
  68. #    movew    #%000 011 000 0100011,a0@(comm)    | mul fp3 -> fp0
  69.     movew    #0x0c23,a0@(comm)        | mul fp3 -> fp0
  70.     .word    0x4a68,0xfff0,0x6bfa        | test
  71.  
  72. #    movew    #%000 001 010 0100011,a0@(comm)    | mul fp1 -> fp2
  73.     movew    #0x0523,a0@(comm)        | mul fp1 -> fp2
  74.     .word    0x4a68,0xfff0,0x6bfa        | test
  75.  
  76. #    movew    #%000 001 011 0100011,a0@(comm)    | mul fp1 -> fp3
  77.     movew    #0x05a3,a0@(comm)        | mul fp1 -> fp3
  78.     .word    0x4a68,0xfff0,0x6bfa        | test
  79.  
  80. #    movew    #%000 011 100 0101000,a0@(comm)    | sub fp3 -> fp4
  81.     movew    #0x0e28,a0@(comm)        | sub fp3 -> fp4
  82.     .word    0x4a68,0xfff0,0x6bfa        | test
  83.  
  84. #    movew    #%000 000 010 0100010,a0@(comm)    | add fp0 -> fp2
  85.     movew    #0x0122,a0@(comm)        | add fp0 -> fp2
  86.     .word    0x4a68,0xfff0,0x6bfa        | test
  87.  
  88. # return real part (fp4) and imaginery part (fp2)
  89.     
  90. #    movew    #%011 101 100 0000000,a0@(comm)    | fp4 -> d0
  91.     movew    #0x7600,a0@(comm)        | fp4 -> d0
  92.     .long    0x0c688900, 0xfff067f8
  93.     movel    a0@(zahl),a1@+
  94.     movel    a0@(zahl),a1@+
  95.  
  96. #    movew    #%011 101 010 0000000,a0@(comm)    | fp2 -> d1
  97.     movew    #0x7500,a0@(comm)        | fp2 -> d1
  98.     .long    0x0c688900, 0xfff067f8
  99.     movel    a0@(zahl),a1@+
  100.     movel    a0@(zahl),a1@+
  101.     rts                    | sigh!
  102.